package server.comunicaciones;



import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
import java.sql.SQLException;
import java.util.Hashtable;
import java.util.Vector;

import client.comunicaciones.IJugador;

import server.dominio.Kenken;
import server.dominio.Sudoku;
import server.presentacion.JFServer;


@SuppressWarnings("serial")
public class KenkenServer extends Server {

	private Hashtable<Integer, Kenken> cacheKenkens;
	private JFServer ventana;
	
	public KenkenServer(JFServer ventana) throws RemoteException {
        super();
        this.ventana=ventana;
        LocateRegistry.createRegistry(2995);
        cacheKenkens=new Hashtable<Integer, Kenken>();
    }
	
	/*public void poner(String id, byte idCuadricula, byte fila, byte columna, byte numero) throws RemoteException {
        Kenken kenken=this.findServer(Integer.parseInt(id));
        if (kenken==null) 
        	return;
        kenken.poner(idCuadricula, fila, columna, numero);
    }

	public void quitar(String id, byte idCuadricula, byte fila, byte columna) throws RemoteException {
    	Sudoku sudoku=this.findServer(Integer.parseInt(id));
        if (sudoku==null) 
        	return;
        sudoku.quitar(idCuadricula, fila, columna);
    }*/
	
	public void conectar(int tipoPersistencia, String ubicacionSudokus) throws MalformedURLException, RemoteException {
        try {
            Naming.bind("rmi://127.0.0.1:2995/server", this);
          // 	FachadaPersistenciaKenken.buildInstancia(tipoPersistencia, ubicacionKenkens);
        }
        catch (AlreadyBoundException ex) {
            Naming.rebind("rmi://127.0.0.1:2995/server", this);
         //   FachadaPersistenciaKenken.buildInstancia(tipoPersistencia, ubicacionKenkens);
        }
    }

    public void desconectar() throws RemoteException, MalformedURLException, NotBoundException {
        Naming.unbind("rmi://127.0.0.1:2995/server");
    }

   /* public Vector<String> getKenkens() throws Exception {
    	KenkenDAO dao=FachadaPersistenciaKenken.getKenkenDAO();
    	Vector<String> result=dao.getKenkens();
    	return result;
    }
    
    public String getServer(IJugador jugador, String idSudoku, String idJugador) throws Exception {
    	Kenken result=this.findKenken(Integer.parseInt(idKenken));
		if (result==null) {
			result=new Kenken(idKenken);
			this.putKenken(result);
		}
		if (result.findJugador(idJugador)!=null)
			throw new Exception("Ya hay un jugador con ese nombre en este keneken");
		result.add(jugador, idJugador);
		result.setVentana(this.ventana);
		return result.toString();
	}*/

	private void putServer(Kenken result) {
		this.cacheKenkens.put(result.getId(), result);
	}
    
	private Kenken findKenken(int id) {
		return (Kenken) this.cacheKenkens.get(id);
	}
	
	public void guardar(String numeros) throws Exception {
		Kenken kenken=new Kenken();
		kenken.setNumeros(numeros);
		kenken.insert();
	}

	@Override
	public Vector<String> getSudokus() throws RemoteException, SQLException,
			Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void Server(JFServer ventana) throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void poner(String id, byte idCuadricula, byte fila, byte columna,
			byte numero) throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void quitar(String id, byte idCuadricula, byte fila, byte columna)
			throws RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public String getSudoku(IJugador jugador, String idSudoku, String idJugador)
			throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Vector<String> getSudokuss() throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void putServer(Sudoku result) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public Sudoku findServer(int id) {
		// TODO Auto-generated method stub
		return null;
	}
    
	
	/*public void Server(JFServer ventana) throws RemoteException {
    	Kenken kenken=this.findKenken(Integer.parseInt(id));
        if (kenken==null) 
        	return;
        sudoku.quitar(idCuadricula, fila, columna);
    }*/

}